
還是請我們的貓貓助教來幫忙XDDDD
Day16_高斯模糊找輪廓_GaussianBlur_Canny.ipynb
基本修圖技能學習完之後,
再來我們要來學一些比較進階會使用的修圖技巧囉!
今天我們會來測試兩張圖片!
首先我們先建立比較好理解的較簡單圖片。
shape = (200, 200, 3)
origin_img = np.zeros(shape, np.uint8)
origin_img = draw_cirlces(origin_img, circle_mid=(50,50), color=(0,255,0) ,radius=30)
origin_img = draw_cirlces(origin_img, circle_mid=(50,150), color=(255,255,0) ,radius=27)
origin_img = draw_cirlces(origin_img, circle_mid=(100,100), color=(255,0,255) ,radius=23)
origin_img = draw_cirlces(origin_img, circle_mid=(150,60), color=(255,0,0) ,radius=25)
origin_img = draw_cirlces(origin_img, circle_mid=(150,150), color=(0,0,255) ,radius=21)
origin_img = draw_cirlces(origin_img, circle_mid=(120,35), color=(0,255,255) ,radius=18)
origin_img = draw_cirlces(origin_img, circle_mid=(110,150), color=(255,255,255) ,radius=40)
print("origin picture:")
show_img(origin_img)
其實上面的程式幾乎都只是在為這張範例圖片畫圓而已...
不用想得太複雜哈哈哈哈

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # start from BGR -> gray
因為彩色的圖片有三個顏色通道需要處理,
但我們今天只需要找到輪廓,用一個通道即可,
這樣能使得我們在運算上不會到太複雜,
因此我們會先將圖片轉成灰階。

# 高斯模糊(高斯平滑),與計算核心大小
def do_GaussianBlur(gray):
    kernel_size = 5
    blur_gray = cv2.GaussianBlur(gray,(kernel_size, kernel_size), 0)
    return blur_gray
高斯模糊(又稱高斯平滑),正如他的名字,就是我們將圖片模糊化,kernel_size 是我們進行運算時,對於多大範圍的圖片進行運算。
簡單可以理解為:我們如果對 5x5 的
kernel_size運算,
那圖片每一個 5x5 的中心受到高斯模糊的影響會最大
算出來就會是一張比較模糊的圖片。

(看得出來有比較模糊吧哈哈哈哈哈)
Q: 為什麼要模糊?
A: 因為先做高斯模糊(或說經過高斯平滑)的圖片能夠去除很多圖片的噪聲(雜訊),
更容易讓我們找到更精準的輪廓。
# Canny邊緣運算
def do_Canny(blur_gray):
    low_threshold = 1
    high_threshold = 90
    edges = cv2.Canny(blur_gray, low_threshold, high_threshold)
    return edges
其中有兩個參數需要自己依情況調整,
我們知道灰階圖片的值介於 0~255 之間,
情況有三種:
high_threshold: 為 strong edge ,我們直接保留low_threshold 與 high_threshold: 為 weak edge ,weak edge 是否能與 strong edge 相連,low_threshold: 我們都不當作 edge
我們來看看貓貓的圖跑上面的流程會發生什麼事情~
我們設定 low_threshold = 10、high_threshold = 90 的時候

我們設定 low_threshold = 1、high_threshold = 10 的時候

(有一種素描畫的感覺?)
low_threshold, high_threshold,我們會依據使用情境不同調整參數,
達到自己需要的效果。
https://ask.csdn.net/questions/706468
https://www.kancloud.cn/aollo/aolloopencv/269599
https://chtseng.wordpress.com/2016/12/05/opencv-edge-detection%E9%82%8A%E7%B7%A3%E5%81%B5%E6%B8%AC/
https://medium.com/@pomelyu5199/canny-edge-detector-%E5%AF%A6%E4%BD%9C-opencv-f7d1a0a57d19